package com.woniu.controller;


import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Snowflake;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.woniu.commons.model.Result;
import com.woniu.commons.util.JwtUtil;
import com.woniu.commons.util.RedisUtil;
import com.woniu.model.form.AddQualificationForm;
import com.woniu.model.form.PageQualificationForm;
import com.woniu.model.form.RejectQualificationForm;
import com.woniu.model.model.YQualification;
import com.woniu.model.param.AddQualificationParam;
import com.woniu.model.param.PageQualificationByVenueIdParam;
import com.woniu.service.YQualificationService;
import com.woniu.util.FileUtil;
import com.woniu.util.OSSUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.time.LocalDateTime;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author EdisonLiu
 * @since 2024年05月23日
 */
@RestController
@RequestMapping("/yQualification")
@Api(tags = "场馆入驻申请管理")
public class YQualificationController {

    @Resource
    private YQualificationService qualificationService;
    @Resource
    private RedisUtil redisUtil;

    /**
     * 场馆提交认证信息
     * @param form 认证信息表单
     * @return
     * @throws Exception
     */
    @PostMapping("/addQualification")
    @ApiOperation(value = "场馆提交认证信息")
    public Result<?> addQualification( AddQualificationForm form,@RequestHeader String token) throws Exception {
        String refreshToken = redisUtil.get(token);
        Integer venueId = Integer.parseInt(JwtUtil.parseToken(refreshToken).get("venueId").toString());


        if (!FileUtil.isImageFile(form.getVenueImgFile().getInputStream())) {
            throw new Exception("文件类型有误，请检查");
        }

        if (!FileUtil.isImageFile(form.getVenueLicenseFile().getInputStream())) {
            throw new Exception("文件类型有误，请检查");
        }
        //证书
        //获取上传文件的原始文件名
        String oldname = form.getVenueLicenseFile().getOriginalFilename();

        //获取上传文件的后缀名
        String substring = oldname.substring(oldname.lastIndexOf("."));

        //生成一个雪花作为文件名
        String idStr = new Snowflake(1, 1).nextIdStr();

        //调用OSSUtil工具类的方法，将文件上传到阿里云
        String file = OSSUtil.uploadFile(form.getVenueLicenseFile().getInputStream(), idStr + substring, "edison-coco");

        //图片
        String oldname1 = form.getVenueImgFile().getOriginalFilename();

        //获取上传文件的后缀名
        String substring1 = oldname1.substring(oldname.lastIndexOf("."));

        //生成一个雪花作为文件名
        String idStr1 = new Snowflake(1, 1).nextIdStr();

        //调用OSSUtil工具类的方法，将文件上传到阿里云
        String file1 = OSSUtil.uploadFile(form.getVenueImgFile().getInputStream(), idStr1 + substring1, "edison-coco");


        AddQualificationParam param = BeanUtil.toBean(form, AddQualificationParam.class);
        param.setVenueId(venueId);
        param.setVenueLicense(file);
        param.setVenueImg(file1);
        param.setCreateTime(LocalDateTime.now());
        Integer integer = qualificationService.addQualification(param);
        if (integer.equals(0) ){
            return Result.getResult().setMsg("添加失败").setCode(500);
        }
        return Result.getResult().setMsg("提交认证信息成功,请等待管理员审批").setCode(200);
    }

//    @PostMapping("/addQualificationLicenseFile")
//    @ApiOperation(value = "场馆提交认证信息(除了场馆图片和许可证)")
//    public Result<?> addQualificationLicenseFile(@RequestBody AddQualificationForm form) throws Exception {
//
//        if (!FileUtil.isImageFile(form.getVenueImgFile().getInputStream())) {
//            throw new Exception("文件类型有误，请检查");
//        }
//
//        if (!FileUtil.isImageFile(form.getVenueLicenseFile().getInputStream())) {
//            throw new Exception("文件类型有误，请检查");
//        }
//        //证书
//        //获取上传文件的原始文件名
//        String oldname = form.getVenueLicenseFile().getOriginalFilename();
//
//        //获取上传文件的后缀名
//        String substring = oldname.substring(oldname.lastIndexOf("."));
//
//        //生成一个雪花作为文件名
//        String idStr = new Snowflake(1, 1).nextIdStr();
//
//        //调用OSSUtil工具类的方法，将文件上传到阿里云
//        String file = OSSUtil.uploadFile(form.getVenueLicenseFile().getInputStream(), idStr + substring, "edison-coco");
//
//        //图片
//        String oldname1 = form.getVenueImgFile().getOriginalFilename();
//
//        //获取上传文件的后缀名
//        String substring1 = oldname1.substring(oldname.lastIndexOf("."));
//
//        //生成一个雪花作为文件名
//        String idStr1 = new Snowflake(1, 1).nextIdStr();
//
//        //调用OSSUtil工具类的方法，将文件上传到阿里云
//        String file1 = OSSUtil.uploadFile(form.getVenueImgFile().getInputStream(), idStr1 + substring1, "edison-coco");
//
//
//        AddQualificationParam param = BeanUtil.toBean(form, AddQualificationParam.class);
//        param.setVenueLicense(file);
//        param.setVenueImg(file1);
//        param.setCreateTime(LocalDateTime.now());
//        Integer integer = qualificationService.addQualification(param);
//        if (integer.equals(0) ){
//            return Result.getResult().setMsg("添加失败").setCode(500);
//        }
//        return Result.getResult().setMsg("提交认证信息成功");
//    }
//
//    @PostMapping("/addQualificationLicenseFile")
//    @ApiOperation(value = "场馆提交认证信息(除了场馆图片和许可证)")
//    public Result<?> addQualificationImgFile(@RequestBody AddQualificationForm form) throws Exception {
//
//        if (!FileUtil.isImageFile(form.getVenueImgFile().getInputStream())) {
//            throw new Exception("文件类型有误，请检查");
//        }
//
//        if (!FileUtil.isImageFile(form.getVenueLicenseFile().getInputStream())) {
//            throw new Exception("文件类型有误，请检查");
//        }
//        //证书
//        //获取上传文件的原始文件名
//        String oldname = form.getVenueLicenseFile().getOriginalFilename();
//
//        //获取上传文件的后缀名
//        String substring = oldname.substring(oldname.lastIndexOf("."));
//
//        //生成一个雪花作为文件名
//        String idStr = new Snowflake(1, 1).nextIdStr();
//
//        //调用OSSUtil工具类的方法，将文件上传到阿里云
//        String file = OSSUtil.uploadFile(form.getVenueLicenseFile().getInputStream(), idStr + substring, "edison-coco");
//
//        //图片
//        String oldname1 = form.getVenueImgFile().getOriginalFilename();
//
//        //获取上传文件的后缀名
//        String substring1 = oldname1.substring(oldname.lastIndexOf("."));
//
//        //生成一个雪花作为文件名
//        String idStr1 = new Snowflake(1, 1).nextIdStr();
//
//        //调用OSSUtil工具类的方法，将文件上传到阿里云
//        String file1 = OSSUtil.uploadFile(form.getVenueImgFile().getInputStream(), idStr1 + substring1, "edison-coco");
//
//
//        AddQualificationParam param = BeanUtil.toBean(form, AddQualificationParam.class);
//        param.setVenueLicense(file);
//        param.setVenueImg(file1);
//        param.setCreateTime(LocalDateTime.now());
//        Integer integer = qualificationService.addQualification(param);
//        if (integer.equals(0) ){
//            return Result.getResult().setMsg("添加失败").setCode(500);
//        }
//        return Result.getResult().setMsg("提交认证信息成功");
//    }

    /**
     * 场馆取消入驻申请
     * @param certifyId 入驻申请的id
     * @param token 取场馆id
     * @return
     */
    @GetMapping("/cancelQualification")
    @ApiOperation(value = "场馆取消入驻申请")
    public Result<?> cancelQualification(Integer certifyId,@RequestHeader String token){
        String refreshToken = redisUtil.get(token);
        Integer venueId = Integer.parseInt(JwtUtil.parseToken(refreshToken).get("venueId").toString());
        Integer integer = qualificationService.cancelQualification(venueId, certifyId);
        if (integer.equals(0)){
            return Result.getResult().setMsg("取消入驻失败").setCode(500);
        }
        return Result.getResult().setMsg("取消入驻申请成功");
    }

    /**
     * 管理员浏览入驻申请 分页展示
     * @param form 分页信息，入驻申请状态
     * @return
     */
    @GetMapping("/pageQualification")
    @ApiOperation(value = "入驻申请分页显示")
    public Result<Page> pageQualification(PageQualificationForm form){
        Page<YQualification> page = qualificationService.pageQualification(form);
        return Result.newInstance(Page.class).setData(page);
    }

    /**
     * 管理员通过场馆入驻申请
     * @param certifyId 入驻申请id
     * @return
     */
    @GetMapping("/passQualification")
    @ApiOperation(value = "管理员通过场馆入驻申请")
    public Result<?> passQualification(Integer certifyId){
        Integer i = qualificationService.passQualification(certifyId);
        if (!i.equals(1)){
            return Result.getResult().setMsg("通过申请失败");
        }
        return Result.getResult().setMsg("通过成功");
    }

    /**
     * 管理员驳回入驻申请
     * @param form 入驻申请id及驳回原因
     * @return
     */
    @PostMapping("/rejectQualification")
    @ApiOperation(value = "管理员驳回入驻申请")
    public Result<?> rejectQualification(@RequestBody RejectQualificationForm form){
        Integer i = qualificationService.RejectQualificationForm(form);
        if (!i.equals(1)){
            return Result.getResult().setMsg("驳回失败");
        }
        return Result.getResult().setMsg("驳回申请成功");
    }

    /**
     * 场馆浏览入驻申请 分页展示
     * @param form 分页信息，入驻申请状态
     * @return
     */
    @GetMapping("/pageQualificationByVenueId")
    @ApiOperation(value = "入驻申请分页显示")
    public Result<Page> pageQualificationByVenueId(PageQualificationForm form,@RequestHeader String token){
        String refreshToken = redisUtil.get(token);
        Integer venueId = Integer.parseInt(JwtUtil.parseToken(refreshToken).get("venueId").toString());
        PageQualificationByVenueIdParam param = BeanUtil.toBean(form, PageQualificationByVenueIdParam.class);
        param.setVenueId(venueId);
        Page<YQualification> page = qualificationService.pageQualificationByVenueId(param);
        return Result.newInstance(Page.class).setData(page);
    }

}

